package com.group4.datafactorybackend.entity.DTO;

import com.group4.datafactorybackend.common.DataFactoryConstantPool;
import com.group4.datafactorybackend.common.enums.MyEnumClass;
import com.group4.datafactorybackend.common.verify.QsmSpecifiedSelector;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.util.List;

/**
 * @author xin
 * @date 2022/8/9
 * @description 新增、修改接口接收参数实体类 TODO
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CreateOrUpdateApiDTO {

    /**
     * 表ID
     */
    private Long id;

    /**
     * 接口编号
     */
    private String apiCode;

    /**
     * 接口名称
     */
    @Length(max = 30, message = "接口名称长度不能超过30")
    @NotBlank(message = "接口名称不能为空")
    private String apiName;

    /**
     * 接口描述
     */
    @Length(max = 200, message = "接口描述长度不能超过200")
    private String apiDescribe;

    /**
     * 接口目录编号
     */
    @NotBlank(message = "接口分类不能为空")
    private String apiDirectoryCode;

    /**
     * 接口来源
     */
    @NotBlank(message = "接口来源不能为空")
    private String apiSource;

    /**
     * 接口状态
     */
    private Integer apiStatus;

    /**
     * 接口协议
     */
    @QsmSpecifiedSelector(enumValue = MyEnumClass.ApiAgreementEnum.class, message = "错误的接口协议值")
    @NotBlank(message = "接口协议不能为空")
    private String apiAgreement;

    /**
     * 接口IP:端口
     */
    @Pattern(regexp = "^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)+:\\d{1,5}/?$")
    @NotBlank(message = "IP:端口 不能为空")
    private String apiIpPort;

    /**
     * 接口路径
     */
    @NotBlank(message = "接口路径不能为空")
    private String apiPath;

    /**
     * 接口请求方式
     */
    @QsmSpecifiedSelector(enumValue = MyEnumClass.RequestTypeEnum.class, message = "错误的请求方式值")
    @NotNull(message = "接口请求方式不能为空")
    private Integer apiRequestMethod;

    /**
     * 接口请求超时时间
     */
    @NotBlank(message = "接口请求超时时间不能为空")
    private String apiRequestTimeout;

    /**
     * 接口参数配置集合
     */
    @Valid
    private List<CreateOrUpdateApiParamterConfigurationDTO> createOrUpdateApiParamterConfigurationList;
}
